iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0
AI & Data

OpenAI 從提示工程(Prompt Engineering)到語義核心(Semantic Kernel)的實踐系列 第 15

Semantic Kernel的實踐:Semantic Kernel - 配置 Kernel

  • 分享至 

  • xImage
  •  

前言

前一篇以一個簡單的Sample體會如何使用Semantic Kernel,接著就要來細說Semantic Kernel的細節,本篇先從 Kernel開始。

範例採用C#程式語言,並以主控台應用程式做為示範,使用的是.net 7.0。
此外GPT模型使用的是Azure OpenAI GPT-4,事實也可以依需求改用OpenAI服務,而模型也可以改用GPT-3.5。

Semantic Kernel 套件

Semantic Kernel 是以開源方式發行,並以套件方式融入應用中,以C#來說就是以Nuget套件發行,只是在目前尚未正式發佈1.0版本前,必須勾選包含搶鮮版,這樣才能找到Semantic Kernel 套件 — Microsoft.SemanticKernel。
https://ithelp.ithome.com.tw/upload/images/20230930/20126569BzZVNIbiBe.png

Kernel

Semantic Kernel 的整個機制都是建立在 Kernel 物件身上,因此不管是連結模型或是Plugins都是以Kernel 物件為中心。

  • 直接建立一個Kernel 物件然後呼叫一個本機function,輸出日期時間

這個範例,要注意的是這個範例 Kernel 物件本身並沒有接上任何模型,然後它卻掛入的了一個內建開箱即用的Plugins(TimeSkill),然後kernel.RunAsync就可以執行輸出時間,可以看到它並沒有Chat的功能。

var kernel = Kernel.Builder.Build();
var time = kernel.ImportSkill(new TimeSkill());
var result = await kernel.RunAsync(time["Today"]);

Console.WriteLine(result);
  • 包含設定值的Kernel 物件
    前一個範例,有提到Kernel 物件並沒有接上任何模型,但開發LLM應用怎麼可能會沒有模型呢?所以多數情況在建立Kernel 物件時,都會有一些設定值要做設定,也就是所謂的config。就像這個範例一樣,設定為使用Azure OpenAI Service模型,而WithAzureChatCompletionService是Semantic Kernel內建的服務,一樣開箱即用。
var kernel = new KernelBuilder()
            .WithAzureChatCompletionService(
             deploy_model,   // Azure OpenAI Deployment Name
             aoai_Endpoint, // Azure OpenAI Endpoint
             api_Key  // Azure OpenAI Key
            ).Build();

想使用 OpenAI,就換用WithOpenAIChatCompletionService,同樣內建開箱即用

現階段版本,Semantic Kernel提供了不只上述二種的開箱即用的服務,還有像是

  • WithAzureOpenAIImageGenerationService:OpenAI DallE image generation service
  • WithAzureTextCompletionService:Azure OpenAI text completion service
  • WithAzureTextEmbeddingGenerationService:Azure OpenAI text embeddings service
  • WithOpenAIChatCompletionService:OpenAI ChatGPT completion service
  • WithOpenAIImageGenerationService:OpenAI DallE image generation service
  • WithOpenAITextCompletionService:OpenAI text completion service
  • WithOpenAITextEmbeddingGenerationService:OpenAI text embeddings service

當然你也可以自行擴展,使用WithAIService將自定義的AI Service置入到Kernel物件中

除此之外,也可以配置

  • WithMemory:semantic text memory entity
  • WithLoggerFactory:logger to the kernel
  • WithMemoryStorage:memory storage to the kernel

而當你的LLM應用需要使用多個模型服務時,Kernel物件也支援配置多個模型服務

這個範例是Kernel物件配置了Embedding、MemoryStorage、Azure OpenAI 服務

var kernel = new KernelBuilder()
            .WithAzureTextEmbeddingGenerationService(embedding_Model, aoai_Endpoint, api_Key)
            .WithMemoryStorage(new VolatileMemoryStore())
            .WithAzureChatCompletionService(
             deploy_Model,   // Azure OpenAI Deployment Name
             aoai_Endpoint, // Azure OpenAI Endpoint
             api_Key  // Azure OpenAI Key
            ).Build();

Plugins的部份,也是必須依需求事先置入Kernel物件中

 //接上Plugins
var pluginsDirectory = Path.Combine(System.IO.Directory.GetCurrentDirectory(), "Plugins");
var writerPlugin = kernel.ImportSemanticSkillFromDirectory(pluginsDirectory, "WriterPlugin");

結語

本篇內容說明了如何建立Semantic Kernel最核心的Kernel物件的方式,可以看到Semantic Kernel已經包裝好許多常用的服務,這些都是可以直接開箱即用的,例如WithOpenAIChatCompletionService也不用自行撰寫API的呼叫,對開發上來說相當的方便,接下來連續幾篇系例文,我們將進入Plugins的說明。

嗨,我是Ian,我喜歡分享與討論,今年跟2位朋友合著了一本ChatGPT主題書,如果你是一位開發者,這本書或許會有些幫助,https://www.tenlong.com.tw/products/9786263335189
這次的鐵人賽文章也會同時發佈於個人blog,歡迎關注我的blog : https://medium.com/@ianchen_27500


上一篇
Semantic Kernel的實踐:Semantic Kernel first sample
下一篇
Semantic Kernel的實踐:Semantic Kernel - 認識 plugins
系列文
OpenAI 從提示工程(Prompt Engineering)到語義核心(Semantic Kernel)的實踐30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言